{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 第2章-感知机模型-随机梯度下降法\n",
    "&emsp;&emsp;感知机模型的学习策略是要最小化误分类点到分类超平面距离的和，其对应的经验风险函数是$\\displaystyle L(w, b)=-\\sum_{x_{i} \\in M} y_{i}(w \\cdot x_{i}+b)$，是一个关于$w和b$的函数，$w$是一个$n$维向量，$x_i$(每一个输入变量)也是一个$n$维向量，$x_{i} \\in M$表示经验风险函数中包含的求和项只是在当前的分类超平面中被误分类的那些点，现在需要找到是该公式的值最小的$w和b$，也就是要最小化这个函数$L(w,b)$。  \n",
    "首先求出关于$w$的梯度：$\\displaystyle \\bigtriangledown_w L(w,b) = -\\sum_{x_i \\in M } y_i x_i$  \n",
    "再求出关于$b$的梯度：$\\displaystyle \\bigtriangledown_b L(w,b) = -\\sum_{x_i \\in M } y_i$  \n",
    "&emsp;&emsp;采用梯度下降法，对$w,b$进行更新：\n",
    "$$\\begin{array}{l} \n",
    "\\displaystyle w := w + \\eta \\sum_{x_i \\in M } y_i x_i \\\\\n",
    "\\displaystyle b := b + \\eta \\sum_{x_i \\in M } y_i\n",
    "\\end{array}$$\n",
    "&emsp;&emsp;而随机梯度下降法，只会添加一个$y_i x_i$，为什么要采用随机梯度下降呢？因为在一般的问题里面，可能数据量比较大，每次只用一个数据来更新$w和b$，降低计算量；还有另外一个原因，需要更新的$x_i$是误分类点，在更新完之后，就不是误分类的点，所以再第二次更新$w和b$的时候，仍需再一次计算$y_ix_i$，浪费计算时间。  \n",
    "&emsp;&emsp;随机梯度下降法，每次只用一个实例点进行更新$w和b$，然后用新的$w和b$判断目前状态下的误分类点。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
